---
description: 'Configuração usada nos editores de textos do Projeto de Documentação do FreeBSD'
next: books/fdp-primer/trademarks
path: /books/fdp-primer/
prev: books/fdp-primer/writing-style
showBookMenu: 'true'
tags: ["editor", "configuration", "vim", "emacs", "FreeBSD"]
title: 'Capítulo 12. Configuração do Editor'
weight: 13
---

[[editor-config]]
= Configuração do Editor
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 12
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/fdp-primer/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

Ajustar a configuração do editor de texto pode tornar o trabalho nos arquivos da documentação mais rápido e fácil, além de ajudar os documentos a ficarem em conformidade com as diretrizes do projeto.

[[editor-config-vim]]
== Vim

Instale o package:editors/vim[], ou package:editors/vim-console[], em seguida siga as instruções em <<editor-config-vim-config>>. Usuários mais avançados podem usar um linter mais adequado como o link:https://github.com/dense-analysis/ale[Ale] que também pode atuar como um link:https://langserver.org/[Protocolo de Servidor de Idiomas] do Vim.

[[editor-config-vim-use]]
=== Uso

Os escritores de páginas de manuais podem usar os seguintes atalhos de teclado para reformatar:
+
* Pressione kbd:[P] para reformatar parágrafos ou texto selecionado no modo Visual.
* Pressione kbd:[T] para substituir grupos de oito espaços por um tab.

Um linter chamado link:https://vale.sh[Vale] foi adicionado para verificar erros gramaticais e cosméticos nos documentos. O Vale possui suporte para diversos editores e IDEs.

O Vale já é instalado como uma dependência do package:textproc/docproj[] meta-port. Caso contrário, instale package:textproc/vale[] com:

[source, console]
....
$ pkg install vale
....

Instale o link:https://github.com/dense-analysis/ale[Ale] para intergrar o package:textproc/vale[] com o package:editors/vim[].

[source, console?prompt=%]
....
% mkdir -p ~/.vim/pack/vendor/start
% git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale
....

Os usuários que estão usando gerenciadores de plug-in no package:editors/vim[] não precisam dos passos acima e devem seguir as instruções do próprio gerenciador de plug-in para instalar o link:https://github.com/dense-analysis/ale[Ale].

Neste momento devido a um bug no link:https://vale.sh[Vale] é necessário copiar a configuração do link:https://vale.sh[Vale] para o diretório home. Considerando que o repositório foi clonado em [.filename]#~/doc# da seguinte forma:

[source, console?prompt=%]
....
% cp -R ~/doc/.vale* ~/
....

[[editor-config-vim-config]]
=== Configuração

Edite o [.filename]#~/.vimrc#, adicionando estas linhas ao final do arquivo:

[source.programlisting, viml]
.`~/.vimrc`
....
if has("autocmd")
  au BufNewFile,BufRead *.adoc call Set_ADOC()
  au BufNewFile,BufRead *.[1-9] call Set_MAN()
endif " has(autocmd)

function Set_Highlights()
  "match ExtraWhitespace /^\s* \s*\|\s\+$/
  return 0
endfunction " Set_Highlights_Adoc()

function Set_Highlights_MAN()
  highlight default link OverLength ErrorMsg
  match OverLength /\%71v.\+/
  return 0
endfunction " Set_Highlights_MAN()

function ShowSpecial()
  setlocal list listchars=tab:>>,trail:*,eol:$
  hi def link nontext ErrorMsg
  return 0
endfunction " ShowSpecial()

function Set_COMMON()
  setlocal number
  setlocal shiftwidth=2
  setlocal tabstop=8
  setlocal softtabstop=2
  setlocal formatprg="fmt -p"
  setlocal autoindent
  setlocal smartindent
  call ShowSpecial()
  call Set_Highlights()
  return 0
endfunction " Set_COMMON()

function Set_ADOC()
  setlocal syntax=asciidoc
  setlocal filetype=asciidoc
  call Set_COMMON()
  return 0
endfunction " Set_ADOC()

function Set_MAN()
  setlocal syntax=man
  setlocal filetype=man
  setlocal textwidth=70
  " Rewrap paragraphs
  noremap P gqj
  " Replace spaces with tabs
  noremap T :s/        /\t/<CR>
  call Set_COMMON()
  call Set_Highlights_MAN()
  return 0
endfunction " Set_Man()

let g:ale_fixers = {
\   '*': ['remove_trailing_lines', 'trim_whitespace'],
\}
let g:ale_linters = {
\   'asciidoc': ['vale'],
\}
let g:ale_fix_on_save = 1
....

[IMPORTANT]
======
A configuração acima removerá automaticamente a linha final, o espaço final e vários espaços que podem exibir alterações indesejadas adicionais na saída do `git diff`. Nesses casos, mencione isso adequadamente no log de commit.
======

[[editor-config-emacs]]
== Emacs

Instale-o a partir de package:editors/emacs[] ou package:editors/emacs-devel[].

[[editor-config-emacs-validation]]
=== Validação

O modo nxml do Emacs usa esquemas NG relax compacto para validar o XML. Um esquema NG relax compacto para a extensão do FreeBSD para DocBook 5.0 está incluído no repositório de documentação. Para configurar o modo nxml para validar usando este esquema, crie [.filename]#~/.emacs.d/schema/schemas.xml# e adicione estas linhas ao arquivo:

[source, xml]
.`~/.emacs.d/schema/schemas.xml`
....
<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
  <documentElement localName="section" typeId="DocBook" />
  <documentElement localName="chapter" typeId="DocBook" />
  <documentElement localName="article" typeId="DocBook" />
  <documentElement localName="book" typeId="DocBook" />
  <typeId id="DocBook" uri="/usr/local/share/xml/docbook/5.0/rng/docbook.rnc" />
</locatingRules>
....

[[editor-config-emacs-igor]]
=== Revisão Automatizada com Flycheck e Igor

O pacote link:https://www.flycheck.org/[Flycheck] está disponível no link:https://melpa.org/[Emacs Lisp Package Archive da Milkypostman] (MELPA). Se a MELPA ainda não estiver nos repositórios de pacotes do Emacs, ele pode ser adicionado executando

[source, emacs-lisp]
....
(add-to-list 'package-archives '("melpa" . "http://stable.melpa.org/packages/") t)
....

Adicione a linha ao arquivo de inicialização do Emacs (qualquer um deles, [.filename]#~/.emacs#, [.filename]#~/.emacs.el#, ou [.filename]#~.emacs.d/init.el#) para tornar esta alteração permanente.

Para instalar o Flycheck, execute

[source, emacs-lisp]
....
(package-install 'flycheck)
....

Crie um verificador Flycheck para package:textproc/igor[] executando

[source, emacs-lisp]
....
(flycheck-define-checker igor
  "FreeBSD Documentation Project sanity checker.

See URLs https://www.freebsd.org/docproj/ and
http://www.freshports.org/textproc/igor/."
  :command ("igor" "-X" source-inplace)
  :error-parser flycheck-parse-checkstyle
  :modes (nxml-mode)
  :standard-input t)

  (add-to-list 'flycheck-checkers 'igor 'append)
....

Novamente, adicione essas linhas ao arquivo de inicialização do Emacs para tornar as mudanças permanentes.

[[editor-config-emacs-specifc]]
=== Configurações Específicas da Documentação do FreeBSD

Para aplicar configurações específicas para o projeto de documentação do FreeBSD, crie o arquivo [.filename]#.dir-locals.el# no diretório raiz do repositório de documentação e adicione estas linhas ao arquivo:

....
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((nxml-mode
  (eval . (turn-on-auto-fill))
  (fill-column . 70)
  (eval . (require 'flycheck))
  (eval . (flycheck-mode 1))
  (flycheck-checker . igor)
  (eval . (add-to-list 'rng-schema-locating-files "~/.emacs.d/schema/schemas.xml"))))
....

[[editor-config-nano]]
== nano

Instale o aplicativo partir de package:editors/nano[] ou package:editors/nano-devel[].

[[editor-config-nano-config]]
=== Configuração

Atualmente não há arquivo de highlight de sintaxe adoc/asciidoc com distribuição nano. Então vamos criar um do zero e usar um editor para criar um novo arquivo ou adicionar linhas no [.filename]#~/.nanorc# com este conteúdo:

[source]
.`~/.nanorc`
....
syntax "asciidoc" "\.(adoc|asc|asciidoc)$"
# main header
color red "^====+$"
# h1
color red "^==[[:space:]].*$"
color red "^----+$"
# h2
color magenta "^===[[:space:]].*$"
color magenta "^~~~~+$"
# h4
color green "^====[[:space:]].*$"
color green "^\^\^\^\^+$"
# h5
color brightblue "^=====[[:space:]].*$"
color brightblue "^\+\+\+\++$"
# attributes
color brightgreen ":.*:"
color brightred "\{[a-z0-9]*\}"
color red "\\\{[a-z0-9]*\}"
color red "\+\+\+\{[a-z0-9]*\}\+\+\+"
# Paragraph Title
color yellow "^\..*$"
# source
color magenta "^\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]"
# Other markup
color yellow ".*[[:space:]]\+$"
color yellow "_[^_]+_"
color yellow "\*[^\*]+\*"
color yellow "\+[^\+]+\+"
color yellow "`[^`]+`"
color yellow "\^[^\^]+\^"
color yellow "~[^~]+~"
color yellow "'[^']+'"
color cyan "`{1,2}[^']+'{1,2}"
# bullets
color brightmagenta "^[[:space:]]*[\*\.-]{1,5}[[:space:]]"
# anchors
color brightwhite "\[\[.*\]\]"
color brightwhite "<<.*>>"
# trailing whitespace
color ,blue "[[:space:]]+$"
# multiples of eight spaces at the start a line
# (after zero or more tabs) should be a tab
color ,blue "^([TAB]*[ ]{8})+"
# tabs after spaces
color ,yellow "( )+TAB"
# highlight indents that have an odd number of spaces
color ,red "^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}"
....

Processe o arquivo para criar guias incorporadas:

[source, console?prompt=%]
....
% perl -i'' -pe 's/TAB/\t/g' ~/.nanorc
....

[[editor-config-nano-use]]
=== Uso

Especifique opções úteis adicionais ao executar o editor:

[source, console?prompt=%]
....
% nano -AKipwz -T8 _index.adoc
....

Usuários do man:csh[1] podem definir um alias em [.filename]#~/.cshrc# para automatizar estas opções:

[source, shell]
....
alias nano "nano -AKipwz -r 70 -T8"
....

Depois que o alias é definido, as opções serão adicionadas automaticamente:

[source, console?prompt=%]
....
% nano _index.adoc
....
